package com.lp.aop.jdk;

import org.aopalliance.intercept.Invocation;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author: lp
 * @create: 2024-03-05 22:08
 * @description: jdk动态代理  源码注解看JDK源码注解
 */
public class JdkDynamicProxy implements InvocationHandler {

	private Object target;

	public JdkDynamicProxy(Object target){
		this.target = target;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] objects) throws Throwable {

		System.out.println("开始时间："+System.currentTimeMillis());

		Object result = method.invoke(target,objects);

		System.out.println("结束时间:"+System.currentTimeMillis());


		return result;
	}

	public Object getProxy(){
		//target.getClass().getInterfaces():由此可以得出，jdk代理对象，必须实现接口
		//target.getClass().getClassLoader():类加载器
		//target.getClass().getInterfaces():代理类实现的接口
		//InvocationHandler:代理类虽然全部实现了接口方法，但接口方法要依靠InvocationHandler处理
		Object o = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
		return o;
	}
}
